﻿using System;
using System.Collections.Generic;
using System.Text;

namespace WeatherBuiltIn
{
    public class LoveIndexDisplay : IObserver<MeasurementData>
    {
        private IDisposable _disposable;
        private float _sum;

        public virtual void Subscribe(IObservable<MeasurementData> provider)
        {
            if (provider != null)
            {
                _disposable = provider.Subscribe(this);//通知提供者观察者将接收通知。
            }

        }
        public void OnCompleted()//通知观察者提供者已经经历了一个错误条件。
        {
            Console.WriteLine("CurrentCondition 任务完成");
            Unsubscribe();
        }

        public void OnError(Exception error)//通知观察者提供者已经完成了基于推送的通知的发送。
        {
            var original = Console.ForegroundColor;//获取或设置控制台的前景色。
            Console.ForegroundColor = ConsoleColor.Red;//获取颜色为红色
            Console.WriteLine("CurrentCondition数据获取错误！");
            Console.ForegroundColor = original;
        }

        public void OnNext(MeasurementData value)//为观察者提供新的数据。
        {
            _sum = (value.Temperature * value.Humidity) / value.Pressure;
            Console.WriteLine($"LoveIndexDisplay: " + $"\n温度：{value.Temperature}C "
                + $"\n湿度：{value.Humidity}% " + $"\n压力：{value.Pressure}" + $"\n恋爱指数为：{_sum}");

            if (_sum > 10)
            {
                Console.WriteLine("今天适合恋爱");
            }
            else
            {
                Console.WriteLine("今天还是单身狗");
            }
        }
        public virtual void Unsubscribe()
        {
            Console.WriteLine("LoveIndexDisplay 取消订阅");
            _disposable.Dispose();
        }
    }
}
